package org.ttitfly.workflow.engine.persistence;

import java.util.List;

import org.ttitfly.workflow.engine.run.ProcessInstance;
import org.ttitfly.workflow.engine.run.Task;

/**
 * 持久服务
 * 
 * @author 潘海春
 * @version 2009-9-18
 */
public interface PersistenceService {

	/**
	 * 获取任务
	 * 
	 * @param id
	 * @return
	 * @throws PersistenceException
	 */
	Task getTask(int id) throws PersistenceException;

	/**
	 * 保存流程实例
	 * 
	 * @param processInstance
	 * @throws PersistenceException
	 */
	void save(ProcessInstance processInstance) throws PersistenceException;

	/**
	 * 更新流程实例
	 * 
	 * @param processInstance
	 * @throws PersistenceException
	 */
	void update(ProcessInstance processInstance) throws PersistenceException;
	
	/**
	 * 删除流程实例
	 * 
	 * @param id
	 * @throws PersistenceException
	 */
	void deleteProcessInstance(int id) throws PersistenceException;

	/**
	 * 保存任务
	 * 
	 * @param task
	 * @throws PersistenceException
	 */
	void save(Task task) throws PersistenceException;

	/**
	 * 更新任务
	 * 
	 * @param task
	 * @throws PersistenceException
	 */
	void update(Task task) throws PersistenceException;
	
	/**
	 * 按条件统计任务数量
	 * @param principal 操作人身份标识
	 * @param processName 流程名称，精确匹配
	 * @param activityName 活动名称，模糊匹配
	 * @param processInstanceName 流程实例名称，全模糊匹配
	 * @param status 任务状态，传入空数组或null将查询所有
	 * @return
	 */
	int countTask(String principal, String processName, String activityName, int processInstanceId, int[] status);
	
	/**
	 * 按条件分页查询任务
	 * @param principal 操作人身份标识
	 * @param processName 流程名称，精确匹配
	 * @param activityName 活动名称，模糊匹配
	 * @param processInstanceName 流程实例名称，全模糊匹配
	 * @param status 任务状态，传入空数组或null将查询所有
	 * @param start 开始下标，从0开始
	 * @param count 查询的数量，如果小于等于0认为是查询所有
	 * @return
	 */
	List<Task> findTask(String principal, String processName, String activityName, int processInstanceId, int[] status, int start, int count);

}
